package com.hdphone.zljutils.inter;

import android.content.Context;
import android.net.Uri;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;

import androidx.annotation.NonNull;

import java.io.UnsupportedEncodingException;
import java.util.Map;

/**
 * @date: 2021/6/3
 * @email： yzandlj@163.com
 * @author： yangzhi
 * @describe: 字符串工具类
 */
public interface IStringUtil {

     String getMobilePhone(String phone);

    /**
     * 从URL中获取比例
     */
     float getProportionFromUrl(String url, float defaultProportion);

    /**
     * URLget请求参数拼接
     *
     * @param params
     * @return
     * @throws UnsupportedEncodingException
     */
     String createLinkStringByGet(Map<String, String> params) throws UnsupportedEncodingException;

    /**
     * 解析出url参数中的键值对,全部换为小写
     *
     * @param url url地址
     * @return url请求参数部分(url中的参数转化为map集合中key都为小写)
     */
     Map<String, String> urlSplit(String url);

    /**
     * 解析出url参数中的键值对,不改变大小写
     *
     * @param url url地址
     * @return url请求参数部分
     */
     Map<String, String> urlSplitIgnoreCase(String url);


    /**
     * 是否为null或空字符串
     *
     * @param str 字符串
     * @return boolean [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     boolean isEmpty(String str);

    /**
     * 包含 null 字符串的为空判断
     *
     * @param str 字符串
     * @return boolean
     */
     boolean isNEmpty(String str);

    boolean isNEmpty(String str1, String str2);

    /**
     * 非null或非空
     *
     * @param str 字符串
     * @return boolean
     */
     boolean isNotEmpty(String str);

    /**
     * 用于判断输入框输入是否是中文
     *
     * @param str 字符串
     * @return boolean
     */
     boolean isCN(String str);


    /**
     * <判断是否为身份证号码>
     *
     * @param IdCard 身份证号
     * @return boolean [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     boolean isIDCard(String IdCard);

    /**
     * <判断是否是数字>
     *
     * @param str 字符串
     * @return boolean [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     boolean isNumber(String str);


    /**
     * 是否是邮件
     *
     * @param str 字符串
     * @return boolean
     */
     boolean isEmail(String str);

    /**
     * 字符串转为整数(如果转换失败,则返回 -1)
     *
     * @param str 字符串
     * @return int [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     int stringToInt(String str);

    /**
     * 字符串转为整数(如果转换失败,则返回 defaultValue)
     *
     * @param str          字符串
     * @param defaultValue 默认值
     * @return int [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     int stringToInt(String str, int defaultValue);

    /**
     * <字符串转为long(如果转换失败,则返回 -1)> <功能详细描述>
     *
     * @param str 字符串转
     * @return long [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     long stringToLong(String str);

    /**
     * <字符串转为long(如果转换失败,则返回 -1)> <功能详细描述>
     *
     * @param str 字符串转
     * @return long [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     long stringToLong(String str, long defaultValue);

    /**
     * 字符串转为Float(如果转换失败,则返回 -1)
     *
     * @param str 字符串
     * @return int [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     float stringToFloat(String str);

    /**
     * 字符串转为Float(如果转换失败,则返回 -1)
     *
     * @param str 字符串
     * @return int [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     float stringToFloat(String str, @NonNull float defaultNum);

    /**
     * 字符串转为Double(如果转换失败,则返回 -1)
     *
     * @param str 字符串
     * @return int [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     double stringToDouble(String str);

    /**
     * 字符串转为Double(如果转换失败,则返回 -1)
     *
     * @param str 字符串
     * @return int [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     double stringToDouble(String str, double defaultNum);

    /**
     * 字体串转为boolean (如果转换失败,则返回false)
     *
     * @param str 字符串转
     * @return boolean [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     boolean stringToBoolean(String str);

    /**
     * boolean转为字体串
     *
     * @param bool boolean
     * @return boolean [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     String booleanToString(Boolean bool);

    /**
     * <从异常中获取调用栈>
     *
     * @param ex Throwable
     * @return String [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     String getExceptionStackTrace(Throwable ex);

    /**
     * <Unicode转化为中文>
     *
     * @param dataStr Unicod字体串
     * @return String [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     String decodeUnicode(String dataStr);

    /**
     * 字条串截取
     *
     * @param str   源字符串
     * @param start 开始位置
     * @param end   结束位置
     * @return String [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     String substring(String str, int start, int end);

    /**
     * 字条串截取
     *
     * @param str   源字符串
     * @param start 开始位置
     * @return String [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     String substring(String str, int start);

    /**
     * <将字符串截取为较短的字符串>
     *
     * @param content 字符串
     * @param length  长度
     * @return CharSequence
     * @see [类、类#方法、类#成员]
     */
     String cutString(String content, int length);

    /**
     * <将字符串多空格，多换行替换成一个空格> <功能详细描述>
     *
     * @param content 字符串
     * @return String [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     String tirmString(String content);

    /**
     * 判断字符是否数字
     *
     * @param str 字符
     * @return 数字
     */
     boolean isDigital(String str);

    /**
     * 判断字符是否带小数
     *
     * @param str 字符
     * @return boolean
     */
     boolean isDouble(String str);

    /**
     * 判断是否存在自定特殊字符
     *
     * @param str 字符
     * @return boolean [返回类型说明]
     * @see [类、类#方法、类#成员]
     */
     boolean isErrorCodeStr(String str);

    /**
     * 返回x小数,如果小数部分不够两位则自动填充小数部分
     *
     * @param process 字符
     * @return [参数说明]
     * @see [类、类#方法、类#成员]
     */
     String getProcess(String process);

    /**
     * 字符串转数字
     *
     * @param str          字符串
     * @param defualtValue 自定义整型
     * @return 整型
     */
     int getInt(String str, int defualtValue);


    /**
     * 去掉url中多余的斜杠
     *
     * @param url 字符串
     * @return 去掉多余斜杠的字符串
     */
     String fixUrl(String url);

    /**
     * 替换字符串中特殊字符
     *
     * @param strData 源字符串
     * @return 替换了特殊字符后的字符串，如果strData为NULL，则返回空字符串
     */
     String encodeString(String strData);

    /**
     * 获取记录唯一ID
     *
     * @return String
     */
     String getOID();

    /**
     * 获取指定编码字符串的长度
     *
     * @param str      字符串
     * @param encoding 编码
     * @return int
     */
     int getStringLength(String str, String encoding);

    /**
     * 判断相同
     *
     * @param str0 字符串
     * @param str1 字符串
     * @return boolean
     */
     boolean areStringEqual(String str0, String str1);

    /**
     * 隐藏字符串中间过长的部分
     *
     * @param src       原字符串
     * @param maxLength 最大长度
     * @param endLength 结尾长度
     * @return 隐藏后的字符串
     */
     String hideMiddleString(String src, int maxLength, int endLength);

    /***
     * 字符串的长度是否某个区间
     *
     * @param str
     *            字符串
     * @param minLength
     *            最小长度
     * @param maxLength
     *            最大长度
     * @return boolean
     */
     boolean isStringLengthOk(String str, int minLength, int maxLength);

    /**
     * 转换百分比(统一保留小数点后两位数)
     *
     * @param num
     * @return
     */
     String getPercent(double num);

    /**
     * 转换百分比(统一保留小数点后sacle位数)
     *
     * @param num
     * @return
     */
     String getPercent(double num, int sacle);

    /**
     * 显示统一格式的数字(统一保留小数点后两位数)
     *
     * @param num
     * @return
     */
     String getDefaultNumber(double num);

    /**
     * 显示统一格式的数字(统一保留小数点后两位数)
     *
     * @param num
     * @return
     */
     String getDefaultNumber(String num);

    /**
     * 显示货币金额数字（固定小数点后显示两位数字）
     *
     * @param num
     * @return
     */
     String getCashNumber(double num);

    /**
     * 显示货币金额数字（固定小数点后显示两位数字）
     *
     * @param num
     * @return
     */
     String getCashNumber(String num);



    /**
     * 高亮显示字符串里的数字
     *
     * @param srcTxt
     * @param highlightColor
     * @return
     */
     SpannableStringBuilder highlightShowNumFormText(String srcTxt, int highlightColor);

    /**
     * 改变小数点后面数字的大小
     *
     * @param value
     * @param proportion
     * @return
     */
     SpannableString changDecimalTVsize(String value, float proportion);

    /**
     * 改变金钱符号跟小数点后面数字的大小
     *
     * @param value
     * @param spValue
     * @return
     */
     SpannableString changDecimalAndMoneySymbolSize(Context context, String value, int spValue);


    /**
     * 改变金钱符号跟小数点后面数字的大小 带后缀
     *
     * @param value
     * @param spValue
     * @return
     */
     SpannableString changDecimalAndMoneySymbolSizeWithSuffix(Context context, String value, int spValue, String suffix, int suffixSpValue);


    /**
     * 将字符串转化为double
     */
     double getParseDouble(String amount);

    int getFontHeight(float fontSize);

    String getRealFilePath(final Context context, final Uri uri);

    /**
     * 去掉字符串里面的html代码。<br>
     * 要求数据要规范，比如大于小于号要配套,否则会被集体误杀。
     *
     * @param content 内容
     * @return 去掉后的内容
     */

     String stripHtml(String content);

    int getColor(String color, int defaultColor);

    /**
     * 正则表达式去掉多余的.与0
     *
     * @param s
     * @return
     */
     String subZeroAndDot(String s);

    /**
     * @param content
     * @return 替换null字段
     */
     String replaceNull(String content);

    /**
     * 格式化毫秒数为 xx:xx:xx这样的时间格式。
     *
     * @param ms 毫秒数
     * @return 格式化后的字符串
     */
     String formatMs(long ms);

    /**
     * 获取字体宽度
     *
     * @param text
     * @param size
     * @return
     */
     float getTextWidth(String text, float size);


    final String[] KEYWORDS = {
            "screenshot", "screen_shot", "screen-shot", "screen shot",
            "screencapture", "screen_capture", "screen-capture", "screen capture",
            "screencap", "screen_cap", "screen-cap", "screen cap", "openscreen", "screen_lock", "截屏", "Screenshots"
    };
}
